Ajax অ্যাপ্লিকেশনগুলির কার্যকারিতা পরীক্ষা (Testing) গুরুত্বপূর্ণ, কারণ এটি ওয়েব অ্যাপ্লিকেশনের অংশ হিসেবে অ্যাসিনক্রোনাস রিকোয়েস্ট ও রেসপন্সের মাধ্যমে ডেটা লোড এবং আপডেট করে। Ajax রিকোয়েস্ট এবং রেসপন্সের সঠিক কার্যকারিতা নিশ্চিত করার জন্য Unit Testing এবং Integration Testing দুটি গুরুত্বপূর্ণ টেস্টিং কৌশল।
এই টিউটোরিয়ালে, Ajax রিকোয়েস্টের জন্য Unit Testing এবং Integration Testing কীভাবে কার্যকরভাবে করা যায়, তা নিয়ে আলোচনা করা হবে।
Unit Testing হল একটি টেস্টিং কৌশল যা একটি নির্দিষ্ট ইউনিট বা কোড ব্লককে (যেমন একটি ফাংশন বা মেথড) স্বতন্ত্রভাবে পরীক্ষা করার জন্য ব্যবহৃত হয়। Ajax ফাংশনের ক্ষেত্রে, সাধারণত আমরা সেই ফাংশন বা মেথডটি পরীক্ষা করি যা HTTP রিকোয়েস্ট তৈরি করে, সার্ভার থেকে ডেটা গ্রহণ করে এবং রেসপন্স প্রক্রিয়া করে।
Unit Testing-এ Ajax রিকোয়েস্ট টেস্ট করার জন্য সাধারণভাবে mocking বা spying প্রযুক্তি ব্যবহার করা হয়, যা প্রকৃত HTTP রিকোয়েস্ট পাঠানো ছাড়া ফাংশনের কার্যকারিতা পরীক্ষা করতে সহায়তা করে।
XMLHttpRequest
বা fetch
API ব্যবহার করে যে ফাংশনটি রিকোয়েস্ট করে, তা টেস্ট করা।JavaScript Code (Ajax Request Function)
function fetchData(url) {
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.open("GET", url, true);
xhr.onload = function() {
if (xhr.status === 200) {
resolve(xhr.responseText);
} else {
reject("Error: " + xhr.status);
}
};
xhr.onerror = function() {
reject("Network Error");
};
xhr.send();
});
}
Unit Test with Jest and Sinon.js
const sinon = require('sinon');
test('fetchData should resolve with data when status is 200', () => {
const xhrMock = sinon.useFakeXMLHttpRequest();
const requests = [];
xhrMock.onCreate = function(req) { requests.push(req); };
const url = "https://jsonplaceholder.typicode.com/todos/1";
fetchData(url).then(response => {
expect(response).toBeDefined();
expect(requests.length).toBe(1);
expect(requests[0].url).toBe(url);
xhrMock.restore();
});
const request = requests[0];
request.respond(200, { "Content-Type": "application/json" }, '{"title":"Test todo"}');
});
Integration Testing হল একটি টেস্টিং কৌশল, যেখানে একাধিক সিস্টেম বা কম্পোনেন্ট একসাথে কাজ করার সময় সঠিকভাবে ইন্টিগ্রেট হচ্ছে কিনা তা পরীক্ষা করা হয়। Ajax রিকোয়েস্টের জন্য Integration Testing মূলত সার্ভারের সাথে যোগাযোগ পরীক্ষা করা হয়, যাতে নিশ্চিত করা যায় যে ক্লায়েন্ট এবং সার্ভারের মধ্যে ডেটা সঠিকভাবে আদান-প্রদান হচ্ছে।
Backend API Example (Node.js)
const express = require('express');
const app = express();
app.get('/data', (req, res) => {
res.status(200).json({ message: "Success" });
});
app.listen(3000, () => console.log('Server running on port 3000'));
Integration Test (Testing Ajax Request)
const supertest = require('supertest');
const app = require('./app'); // Express app import
test('It should fetch data from the server', async () => {
const response = await supertest(app).get('/data');
expect(response.status).toBe(200);
expect(response.body.message).toBe('Success');
});
Ajax রিকোয়েস্টের Unit Testing করার সময়, কখনও কখনও সার্ভার বা নেটওয়ার্ক কল মক বা স্পাই করা হয়, যাতে আসল HTTP রিকোয়েস্ট না পাঠিয়ে টেস্ট করা যায়।
fetch
API with Jest// The function to test
function getData(url) {
return fetch(url)
.then(response => response.json())
.then(data => data);
}
// Mocking fetch
global.fetch = jest.fn(() =>
Promise.resolve({
json: () => Promise.resolve({ message: 'Success' })
})
);
test('getData should return data from API', () => {
return getData('https://api.example.com').then(data => {
expect(data.message).toBe('Success');
expect(fetch).toHaveBeenCalledWith('https://api.example.com');
});
});
Unit Testing এবং Integration Testing Ajax রিকোয়েস্টের জন্য খুবই গুরুত্বপূর্ণ। Unit Testing নিশ্চিত করে যে প্রতিটি ফাংশন এবং মেথড ঠিকভাবে কাজ করছে, এবং Integration Testing পুরো সিস্টেমের মধ্যে বিভিন্ন কম্পোনেন্টের মধ্যে সঠিক যোগাযোগ নিশ্চিত করে। mocking, spying এবং বাস্তব সার্ভারের সাথে টেস্টিংয়ের মাধ্যমে Ajax রিকোয়েস্টের কার্যকারিতা পরীক্ষা করতে পারেন এবং ওয়েব অ্যাপ্লিকেশনটি আরো নির্ভরযোগ্য ও কার্যকরী করতে পারেন।
Read more